package com.msmall.base.rms.manager;

import java.util.List;

import org.json.JSONObject;

import com.msmall.base.PaginationSupport;
import com.msmall.base.rms.po.Administer;
import com.msmall.base.rms.po.Group;
import com.msmall.base.rms.po.Module;

public interface RMSManager {

	public Administer getAdminister(String username) throws Exception;

	public Administer getAdminister(Integer id) throws Exception;

	public void saveAdminister(Administer administer) throws Exception;

	/**
	 * 检查用户是否有权限访问URL
	 */
	public Module getModuleByAdministerAndUrl(Integer administerid, String url)
			throws Exception;
	
	/**
	 * 获得一个用户所拥有权限的所有模块
	 */
	public List<Module> getModuleByAdminister(Integer administerid) throws Exception;
	/**
	 * 获得一个用户所拥有权限的所有模块 返回JSON
	 */
	public JSONObject getModuleByAdministerJson(Integer administerid) throws Exception;
	
	/**
	 * 给组授权模块 ，返回JSON
	 */
	public JSONObject getAuthModuleByAGroupJson(Integer groupid) throws Exception;
	
	public Module getModule(Integer moduleid) throws Exception;
	
	/**
	 * 保存
	 */
	public void saveModule(Module module) throws Exception;
	/**
	 * 分页查找
	 */
	public void searchModule(String moduleName, PaginationSupport page) throws Exception;
	/**
	 * 获得顶级的模块
	 */
	public List<Module> getTopModule() throws Exception;
	/**
	 * 获得模块的父模块列表
	 */
	public List<Module> getParentModule(Integer moduleid) throws Exception;
	/**
	 * 获得模块的子模块列表
	 */
	public List<Module> getChildrenModule(Integer moduleid) throws Exception;
	/**
	 * 物理删除，同时删除。相关的组关系
	 * @throws Exception
	 */
	public void removeModule(Integer moduleid) throws Exception;
	
	public Group getGroup(Integer groupid) throws Exception;
	/**
	 * 保存组的同事，保存组与模块的授权关系
	 * @param group
	 * @param modules
	 * @throws Exception
	 */
	public void saveGroup(Group group, String moduleids) throws Exception;
	/**
	 * 分页查找
	 */
	public void searchGroup(String groupName, PaginationSupport page) throws Exception;
	
	/**
	 * 物理删除，同时删除相关的与管理员授权，与模块授权关系
	 * @throws Exception
	 */
	public void removeGroup(Integer groupid) throws Exception;
	
	/**
	 * 分页查找
	 */
	public void searchAdminister(String username, PaginationSupport page) throws Exception;
	
	/**
	 * 物理删除，同时删除相关的与组授权
	 * @throws Exception
	 */
	public void removeAdminister(Integer administerid) throws Exception;
	
	/**
	 * 修改用户密码
	 * @param administer
	 * @throws Exception
	 */
	public void modifyPassword(Administer administer) throws Exception;
	
	/**
	 * 给管理员付权。每次在页面传递一个组ID
	 * action=1,增加权限;action=-1取消权限
	 *  RMSUtils.AUTH_ACTION_*
	 * @param administerid
	 * @param groupid
	 * @throws Exception
	 */
	public boolean authAdministerGroup(Integer administerid, Integer groupid, String action) throws Exception;
	
	/**
	 * 获得所有的组信息
	 * @throws Exception
	 */
	public List<Group> getAllGroup() throws Exception;
	/**
	 * 获得用户所有的组信息
	 * @throws Exception
	 */
	public List<Group> getGroupByAdminister(Integer administerid) throws Exception;
}
